<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>BNF for PlaidCoreParser.jj</TITLE>
</HEAD>
<BODY>
<H1 ALIGN=CENTER>BNF for PlaidCoreParser.jj</H1>
<H2 ALIGN=CENTER>TOKENS</H2>
<TABLE>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/* *** Token specification *** */
/* Skip whitespace */</PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; SKIP : {
" "
| "\t"
| "\n"
| "\r"
}

   </PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; SKIP : {
"/*" : WithinComment
| "/**" : WithinComment
}

   </PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;WithinComment&gt; SKIP : {
"*/" : DEFAULT
}

   </PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;WithinComment&gt; MORE : {
&lt;~[]&gt;
}

   </PRE>
  </TD>
 </TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
// Single-line comments
</PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; SPECIAL : {
&lt;SINGLE_LINE_COMMENT: "//" (~["\n","\r"])* ("\n" | "\r" | "\r\n")&gt;
}

   </PRE>
  </TD>
 </TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/* Reserved Words */</PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;CASE: "case"&gt;
| &lt;DEF: "default"&gt;
| &lt;IMPORT: "import"&gt;
| &lt;FN: "fn"&gt;
| &lt;MATCH: "match"&gt;
| &lt;METHOD: "method"&gt;
| &lt;NEW: "new"&gt;
| &lt;OF: "of"&gt;
| &lt;PACKAGE: "package"&gt;
| &lt;STATE: "state"&gt;
| &lt;TYPEDEF: "typedef"&gt;
| &lt;THIS: "this"&gt;
| &lt;VAL: "val"&gt;
| &lt;VAR: "var"&gt;
| &lt;WITH: "with"&gt;
| &lt;AS: "as"&gt;
| &lt;REQUIRES: "requires"&gt;
| &lt;OVERRIDE: "override"&gt;
| &lt;UNIT: "unit"&gt;
| &lt;VOID: "void"&gt;
| &lt;TYPE: "type"&gt;
| &lt;GROUP: "group"&gt;
| &lt;ATOMIC: "atomic"&gt;
| &lt;SPLIT: "split"&gt;
| &lt;UNPACKINNERGROUPS: "unpackInnerGroups"&gt;
| &lt;TAKE: "take"&gt;
| &lt;FREEZE: "freeze"&gt;
| &lt;DYN: "dyn"&gt;
| &lt;DYNAMIC: "dynamic"&gt;
| &lt;IMMUTABLE: "immutable"&gt;
| &lt;SHARED: "shared"&gt;
| &lt;UNIQUE: "unique"&gt;
| &lt;FULL: "full"&gt;
| &lt;PURE: "pure"&gt;
| &lt;NONE: "none"&gt;
| &lt;EXCLUSIVE: "exclusive"&gt;
| &lt;PROTECTED: "protected"&gt;
| &lt;MUTABLE: "mutable"&gt;
| &lt;READONLY: "readonly"&gt;
}

   </PRE>
  </TD>
 </TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/* Literals */</PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;STRING_LITERAL: "\"" (~["\"","\\","\n","\r"] | "\\" (["n","t","b","r","f","\\","\'","\""] | ["0"-"7"] (["0"-"7"])? | ["0"-"3"] ["0"-"7"] ["0"-"7"]))* "\""&gt;
| &lt;INTEGER: &lt;DECIMAL_LITERAL&gt; | &lt;HEX_LITERAL&gt; | &lt;OCTAL_LITERAL&gt;&gt;
| &lt;#DECIMAL_LITERAL: ("-")? ["1"-"9"] (["0"-"9"])*&gt;
| &lt;#HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+&gt;
| &lt;#OCTAL_LITERAL: "0" (["0"-"7"])*&gt;
| &lt;FLOATING_POINT_LITERAL: ("-")? (["0"-"9"])+ "." (["0"-"9"])* (&lt;EXPONENT&gt;)? | "." (["0"-"9"])+ (&lt;EXPONENT&gt;)? | ("-")? (["0"-"9"])+ &lt;EXPONENT&gt; | ("-")? (["0"-"9"])+ (&lt;EXPONENT&gt;)?&gt;
| &lt;#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+&gt;
}

   </PRE>
  </TD>
 </TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/* Language Operators and Separators */</PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;LPAREN: "("&gt;
| &lt;RPAREN: ")"&gt;
| &lt;LBRACE: "{"&gt;
| &lt;RBRACE: "}"&gt;
| &lt;LBRACK: "["&gt;
| &lt;RBRACK: "]"&gt;
| &lt;EQUALS: "="&gt;
| &lt;RARROW: "-&gt;"&gt;
| &lt;LARROW: "&lt;-"&gt;
| &lt;DLARROW: "&lt;&lt;-"&gt;
| &lt;DARROW: "=&gt;"&gt;
| &lt;MARROW: "&gt;&gt;"&gt;
| &lt;AT: "@"&gt;
| &lt;DOT: "."&gt;
| &lt;SEMICOLON: ";"&gt;
| &lt;COMMA: ","&gt;
}

   </PRE>
  </TD>
 </TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/* Operators with Java Precedence */</PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;QST: "?"&gt;
| &lt;COLON: ":"&gt;
| &lt;OR: "||"&gt;
| &lt;AND: "&amp;&amp;"&gt;
| &lt;IOR: "|"&gt;
| &lt;XOR: "^"&gt;
| &lt;BITAND: "&amp;"&gt;
| &lt;EQ: "=="&gt;
| &lt;NEQ: "!="&gt;
| &lt;GT: "&gt;"&gt;
| &lt;LT: "&lt;"&gt;
| &lt;GEQ: "&gt;="&gt;
| &lt;LEQ: "&lt;="&gt;
| &lt;LSHIFT: "&lt;&lt;"&gt;
| &lt;RUNSIGNEDSHIFT: "&gt;&gt;&gt;"&gt;
| &lt;PLUS: "+"&gt;
| &lt;MINUS: "-"&gt;
| &lt;STAR: "*"&gt;
| &lt;SLASH: "/"&gt;
| &lt;PERCENT: "%"&gt;
| &lt;BANG: "!"&gt;
| &lt;TILDE: "~"&gt;
}

   </PRE>
  </TD>
 </TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/* User operators */
/* Do not allow comment-like things (// or /*) as user operators */
/* Does not need to account for single character operators */</PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;OP: ("/" ["=","&lt;","&gt;","!","~","?",":","&amp;","|","+","-","^","%"] | ["=","&lt;","&gt;","!","~","?",":","&amp;","|","+","-","*","^","%"])+ ("/")?&gt;
}

   </PRE>
  </TD>
 </TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/* Identifiers */</PRE>
  </TD>
 </TR>
 <!-- Token -->
 <TR>
  <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;ID: ["A"-"Z","a"-"z"] (["A"-"Z","a"-"z","0"-"9","_"])*&gt;
}

   </PRE>
  </TD>
 </TR>
</TABLE>
<H2 ALIGN=CENTER>NON-TERMINALS</H2>
<TABLE>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod1">DeclsStart</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod2">Package</A> ( <A HREF="#prod3">Imports</A> )? ( <A HREF="#prod4">Decl</A> )+ &lt;EOF&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod2">Package</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;PACKAGE&gt; <A HREF="#prod5">DotName</A> &lt;SEMICOLON&gt;</TD>
</TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/*****************************************************************************/
/*								TYPING RULES	 							 */
/*****************************************************************************/</PRE>
  </TD>
 </TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod6">PermType</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;DYN&gt; | &lt;UNIT&gt; | &lt;VOID&gt; | <A HREF="#prod7">LambdaType</A> | <A HREF="#prod8">Permission</A> ( &lt;LT&gt; &lt;ID&gt; &lt;GT&gt; )? <A HREF="#prod9">StructuralType</A> )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod8">Permission</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;FULL&gt; | &lt;IMMUTABLE&gt; | &lt;PURE&gt; | &lt;SHARED&gt; | &lt;UNIQUE&gt; | &lt;NONE&gt; )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod10">ChangeTypeList</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod11">ChangeType</A> ( &lt;COMMA&gt; <A HREF="#prod11">ChangeType</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod11">ChangeType</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod6">PermType</A> ( &lt;MARROW&gt; <A HREF="#prod6">PermType</A> )?</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod9">StructuralType</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;ID&gt; ( <A HREF="#prod12">MetaArguments</A> )? ( &lt;WITH&gt; <A HREF="#prod9">StructuralType</A> )? | <A HREF="#prod13">TypeDecls</A> ( &lt;WITH&gt; <A HREF="#prod9">StructuralType</A> )? )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod14">Environment</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod11">ChangeType</A> &lt;ID&gt; ) ( &lt;COMMA&gt; <A HREF="#prod11">ChangeType</A> &lt;ID&gt; )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod7">LambdaType</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod15">MetaTypes</A> )? &lt;LPAREN&gt; ( <A HREF="#prod10">ChangeTypeList</A> )? &lt;RPAREN&gt; ( &lt;LBRACK&gt; ( <A HREF="#prod14">Environment</A> )? &lt;RBRACK&gt; )? &lt;RARROW&gt; <A HREF="#prod6">PermType</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod13">TypeDecls</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;LBRACE&gt; ( <A HREF="#prod16">TypeDecl</A> )+ &lt;RBRACE&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod16">TypeDecl</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod17">MethodType</A> &lt;SEMICOLON&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod18">FieldType</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod19">MetaType</A> &lt;SEMICOLON&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod17">MethodType</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;METHOD&gt; ( <A HREF="#prod6">PermType</A> <A HREF="#prod20">IdOrOperator</A> ( <A HREF="#prod15">MetaTypes</A> )? | <A HREF="#prod20">IdOrOperator</A> ) &lt;LPAREN&gt; ( <A HREF="#prod10">ChangeTypeList</A> )? &lt;RPAREN&gt; ( &lt;LBRACK&gt; ( <A HREF="#prod11">ChangeType</A> ( &lt;THIS&gt; )? | <A HREF="#prod11">ChangeType</A> &lt;ID&gt; ) ( &lt;COMMA&gt; <A HREF="#prod11">ChangeType</A> &lt;ID&gt; )* &lt;RBRACK&gt; )?</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod18">FieldType</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;VAL&gt; | &lt;VAR&gt; ) ( <A HREF="#prod6">PermType</A> &lt;ID&gt; | &lt;ID&gt; ) &lt;SEMICOLON&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod19">MetaType</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;GROUP&gt; ( <A HREF="#prod21">GroupPermission</A> )? &lt;ID&gt; ( &lt;EQUALS&gt; &lt;NEW&gt; &lt;GROUP&gt; )? | &lt;TYPE&gt; &lt;ID&gt; ( &lt;CASE&gt; &lt;OF&gt; <A HREF="#prod9">StructuralType</A> )? )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod15">MetaTypes</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;LT&gt; <A HREF="#prod19">MetaType</A> ( &lt;COMMA&gt; <A HREF="#prod19">MetaType</A> )* &lt;GT&gt;</TD>
</TR>
 <!-- Special token -->
 <TR>
  <TD>
<PRE>
/*****************************************************************************/
/*							END OF TYPING RULES								 */
/*****************************************************************************/</PRE>
  </TD>
 </TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod22">ID</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;ID&gt; | &lt;TYPE&gt; | &lt;MUTABLE&gt; | &lt;EXCLUSIVE&gt; | &lt;SHARED&gt; | &lt;READONLY&gt; )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod3">Imports</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;IMPORT&gt; <A HREF="#prod5">DotName</A> ( &lt;DOT&gt; &lt;STAR&gt; )? &lt;SEMICOLON&gt; )+</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod4">Decl</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod23">DeclState</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod24">DeclGroup</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod25">DeclField</A> | <A HREF="#prod26">DeclMethod</A> )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod23">DeclState</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod8">Permission</A> )? ( &lt;TYPEDEF&gt; )? &lt;STATE&gt; &lt;ID&gt; ( <A HREF="#prod27">MetaParameters</A> )? ( &lt;CASE&gt; &lt;OF&gt; <A HREF="#prod5">DotName</A> ( <A HREF="#prod12">MetaArguments</A> )? )? ( &lt;EQUALS&gt; <A HREF="#prod28">State</A> | <A HREF="#prod29">DeclList</A> )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod25">DeclField</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;OVERRIDE&gt; )? ( &lt;VAR&gt; | &lt;VAL&gt; )? ( <A HREF="#prod6">PermType</A> <A HREF="#prod22">ID</A> | <A HREF="#prod22">ID</A> ) ( &lt;EQUALS&gt; <A HREF="#prod30">Exp</A> &lt;SEMICOLON&gt; | &lt;SEMICOLON&gt; )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod31">MetaArgument</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( ( <A HREF="#prod22">ID</A> | &lt;THIS&gt; ) ( &lt;DOT&gt; <A HREF="#prod22">ID</A> )? | <A HREF="#prod6">PermType</A> )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod12">MetaArguments</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;LT&gt; <A HREF="#prod31">MetaArgument</A> ( &lt;COMMA&gt; <A HREF="#prod31">MetaArgument</A> )* &lt;GT&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod24">DeclGroup</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;GROUP&gt; &lt;ID&gt; ( &lt;EQUALS&gt; &lt;NEW&gt; &lt;GROUP&gt; )? &lt;SEMICOLON&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod21">GroupPermission</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;EXCLUSIVE&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;SHARED&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;PROTECTED&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;MUTABLE&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;READONLY&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod32">MetaParameter</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( ( &lt;GROUP&gt; )? ( <A HREF="#prod21">GroupPermission</A> )? &lt;ID&gt; | &lt;TYPE&gt; &lt;ID&gt; ( &lt;CASE&gt; &lt;OF&gt; <A HREF="#prod9">StructuralType</A> )? )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod27">MetaParameters</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;LT&gt; <A HREF="#prod32">MetaParameter</A> ( &lt;COMMA&gt; <A HREF="#prod32">MetaParameter</A> )* &lt;GT&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod26">DeclMethod</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;OVERRIDE&gt; )? &lt;METHOD&gt; ( <A HREF="#prod6">PermType</A> <A HREF="#prod20">IdOrOperator</A> ( <A HREF="#prod27">MetaParameters</A> )? | <A HREF="#prod20">IdOrOperator</A> ( <A HREF="#prod27">MetaParameters</A> )? ) &lt;LPAREN&gt; ( <A HREF="#prod33">DeclArgs</A> )? &lt;RPAREN&gt; ( &lt;LBRACK&gt; ( <A HREF="#prod11">ChangeType</A> ( &lt;THIS&gt; )? | <A HREF="#prod11">ChangeType</A> &lt;ID&gt; ) ( &lt;COMMA&gt; <A HREF="#prod11">ChangeType</A> &lt;ID&gt; )* &lt;RBRACK&gt; )? ( <A HREF="#prod34">BlockExpression</A> | &lt;SEMICOLON&gt; )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod33">DeclArgs</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod35">Arg</A> ( &lt;COMMA&gt; <A HREF="#prod35">Arg</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod35">Arg</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod11">ChangeType</A> <A HREF="#prod22">ID</A> | <A HREF="#prod22">ID</A> )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod28">State</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod29">DeclList</A> | <A HREF="#prod5">DotName</A> ( <A HREF="#prod12">MetaArguments</A> )? ( <A HREF="#prod29">DeclList</A> )? | &lt;FREEZE&gt; &lt;LPAREN&gt; &lt;ID&gt; &lt;RPAREN&gt; ) ( &lt;WITH&gt; <A HREF="#prod28">State</A> )?</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod29">DeclList</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;LBRACE&gt; ( <A HREF="#prod4">Decl</A> )* &lt;RBRACE&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod5">DotName</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;ID&gt; ( &lt;DOT&gt; ( &lt;ID&gt; ) )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod34">BlockExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;LBRACE&gt; ( <A HREF="#prod36">StmtListFolded</A> )? &lt;RBRACE&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod37">StmtList</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod38">Stmt</A> ( &lt;SEMICOLON&gt; <A HREF="#prod38">Stmt</A> )* ( &lt;SEMICOLON&gt; )?</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod36">StmtListFolded</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod37">StmtList</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod38">Stmt</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod30">Exp</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod39">LocalVarDecl</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod30">Exp</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;LPAREN&gt; <A HREF="#prod6">PermType</A> &lt;RPAREN&gt; <A HREF="#prod30">Exp</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod40">Function</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;MATCH&gt; &lt;LPAREN&gt; <A HREF="#prod30">Exp</A> &lt;RPAREN&gt; &lt;LBRACE&gt; <A HREF="#prod41">CaseList</A> &lt;RBRACE&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;ATOMIC&gt; &lt;LT&gt; &lt;ID&gt; &lt;GT&gt; <A HREF="#prod34">BlockExpression</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;SPLIT&gt; <A HREF="#prod12">MetaArguments</A> &lt;LBRACE&gt; ( <A HREF="#prod37">StmtList</A> )? &lt;RBRACE&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;UNPACKINNERGROUPS&gt; <A HREF="#prod34">BlockExpression</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod42">ConditionalExpression</A> ( <A HREF="#prod43">ExpSuffix</A> )?</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod44">InfixExp</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod45">SimpleExp</A> ( ( &lt;ID&gt; | &lt;OP&gt; ) <A HREF="#prod45">SimpleExp</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod42">ConditionalExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod46">ConditionalOrExpression</A> ( "?" <A HREF="#prod30">Exp</A> ":" <A HREF="#prod42">ConditionalExpression</A> )?</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod46">ConditionalOrExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod47">ConditionalAndExpression</A> ( "||" <A HREF="#prod47">ConditionalAndExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod47">ConditionalAndExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod48">InclusiveOrExpression</A> ( "&amp;&amp;" <A HREF="#prod48">InclusiveOrExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod48">InclusiveOrExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod49">ExclusiveOrExpression</A> ( "|" <A HREF="#prod49">ExclusiveOrExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod49">ExclusiveOrExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod50">AndExpression</A> ( "^" <A HREF="#prod50">AndExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod50">AndExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod51">EqualityExpression</A> ( "&amp;" <A HREF="#prod51">EqualityExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod51">EqualityExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod52">RelationalExpression</A> ( ( "==" | "!=" ) <A HREF="#prod52">RelationalExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod52">RelationalExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod53">ShiftExpression</A> ( ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) <A HREF="#prod53">ShiftExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod53">ShiftExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod54">AdditiveExpression</A> ( ( "&lt;&lt;" | "&gt;&gt;" | "&gt;&gt;&gt;" ) <A HREF="#prod54">AdditiveExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod54">AdditiveExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod55">MultiplicativeExpression</A> ( ( "+" | "-" ) <A HREF="#prod55">MultiplicativeExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod55">MultiplicativeExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod56">UnaryExpression</A> ( ( "*" | "/" | "%" ) <A HREF="#prod56">UnaryExpression</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod56">UnaryExpression</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( ( "~" | "+" | "-" | "!" ) <A HREF="#prod44">InfixExp</A> | <A HREF="#prod44">InfixExp</A> )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod39">LocalVarDecl</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;VAR&gt; | &lt;VAL&gt; | &lt;TAKE&gt; ) ( <A HREF="#prod6">PermType</A> <A HREF="#prod22">ID</A> | <A HREF="#prod22">ID</A> ) &lt;EQUALS&gt; <A HREF="#prod30">Exp</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod41">CaseList</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;CASE&gt; <A HREF="#prod5">DotName</A> ( &lt;ID&gt; )? <A HREF="#prod34">BlockExpression</A> )* ( &lt;DEF&gt; <A HREF="#prod34">BlockExpression</A> )?</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod20">IdOrOperator</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod22">ID</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod57">Operator</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod45">SimpleExp</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod34">BlockExpression</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;NEW&gt; <A HREF="#prod28">State</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( ( <A HREF="#prod22">ID</A> | &lt;THIS&gt; ) | &lt;LPAREN&gt; <A HREF="#prod58">ExpList</A> &lt;RPAREN&gt; | <A HREF="#prod59">Literal</A> ) ( ( <A HREF="#prod34">BlockExpression</A> | ( <A HREF="#prod12">MetaArguments</A> )? &lt;LPAREN&gt; ( <A HREF="#prod58">ExpList</A> )? &lt;RPAREN&gt; ) )* ( ( &lt;DOT&gt; | &lt;BANG&gt; ) ( <A HREF="#prod22">ID</A> | &lt;NEW&gt; ) ( ( <A HREF="#prod12">MetaArguments</A> )? &lt;LPAREN&gt; ( <A HREF="#prod58">ExpList</A> )? &lt;RPAREN&gt; ( ( <A HREF="#prod34">BlockExpression</A> | &lt;LPAREN&gt; ( <A HREF="#prod58">ExpList</A> )? &lt;RPAREN&gt; ) )* | ( ( <A HREF="#prod34">BlockExpression</A> | &lt;LPAREN&gt; ( <A HREF="#prod58">ExpList</A> )? &lt;RPAREN&gt; ) )* ) )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod58">ExpList</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod30">Exp</A> ( &lt;COMMA&gt; <A HREF="#prod30">Exp</A> )*</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod43">ExpSuffix</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;LARROW&gt; | &lt;DLARROW&gt; ) <A HREF="#prod28">State</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;EQUALS&gt; <A HREF="#prod30">Exp</A></TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod57">Operator</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( &lt;QST&gt; | &lt;COLON&gt; | &lt;OR&gt; | &lt;AND&gt; | &lt;IOR&gt; | &lt;XOR&gt; | &lt;BITAND&gt; | &lt;EQ&gt; | &lt;NEQ&gt; | &lt;GT&gt; | &lt;LT&gt; | &lt;GEQ&gt; | &lt;LEQ&gt; | &lt;LSHIFT&gt; | &lt;MARROW&gt; | &lt;RUNSIGNEDSHIFT&gt; | &lt;PLUS&gt; | &lt;MINUS&gt; | &lt;STAR&gt; | &lt;SLASH&gt; | &lt;PERCENT&gt; | &lt;BANG&gt; | &lt;TILDE&gt; | &lt;OP&gt; )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod40">Function</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;FN&gt; ( <A HREF="#prod27">MetaParameters</A> )? &lt;LPAREN&gt; ( <A HREF="#prod33">DeclArgs</A> )? &lt;RPAREN&gt; ( &lt;LBRACK&gt; <A HREF="#prod11">ChangeType</A> &lt;ID&gt; ( &lt;COMMA&gt; <A HREF="#prod11">ChangeType</A> &lt;ID&gt; )* &lt;RBRACK&gt; )? &lt;DARROW&gt; ( <A HREF="#prod34">BlockExpression</A> | <A HREF="#prod30">Exp</A> )</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod59">Literal</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;STRING_LITERAL&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;INTEGER&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;FLOATING_POINT_LITERAL&gt;</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>&lt;UNIT&gt;</TD>
</TR>
</TABLE>
</BODY>
</HTML>
